package com.zshan.clinic.admin.mapper.config;


import com.zshan.clinic.admin.entity.vo.*;
import com.zshan.clinic.database.model.TemplateMedicalExam;
import com.zshan.clinic.database.model.TemplateMedicalRx;
import com.zshan.clinic.mybatis.SuperMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 *
 * @author lichen
 */
public interface SpecTemplateMapper extends SuperMapper {

    /**
     * 获取模板组
     * @param clinicId
     * @param empId
     * @param templateCategory
     * @param templateType
     * @return
     */
    List<TemplateGroupSelectVo> getGroupSelectList(@Param("clinicId") Long clinicId,
                                                   @Param("empId") Long empId,
                                                   @Param("templateCategory") String templateCategory,
                                                   @Param("templateType") String templateType);

    /**
     * 获取模板组
     * @param clinicId
     * @param groupName
     * @param empId
     * @param templateCategory
     * @param templateType
     * @return
     */
    List<TemplateGroupVo> getTemplateGroupList(@Param("clinicId") Long clinicId,
                                               @Param("groupName") String groupName,
                                               @Param("empId") Long empId,
                                               @Param("templateCategory") String templateCategory,
                                               @Param("templateType") String templateType);


    /**
     * 获取模板列表
     * @param clinicId
     * @param empId
     * @param templateType
     * @param groupId
     * @return
     */
    List<TemplateInfoVo> getTemplateList(@Param("clinicId") Long clinicId,
                                         @Param("empId") Long empId,
                                         @Param("templateType") String templateType,
                                         @Param("groupId") Long groupId,
                                         @Param("templateName") String templateName);


    /**
     * 模板组最大的排序号
     * @param clinicId
     * @param templateCategory
     * @param templateType
     * @param empId
     * @return
     */
    Integer getGroupMaxSortNum(@Param("clinicId") Long clinicId,
                               @Param("templateCategory") String templateCategory,
                               @Param("templateType") String templateType,
                               @Param("empId") Long empId);

    /**
     * 将排序号之后的排序号+1
     * @param clinicId
     * @param empId
     * @param sortNum
     */
    void incrGroupSortNum(@Param("clinicId") Long clinicId,
                          @Param("templateCategory") String templateCategory,
                          @Param("templateType") String templateType,
                          @Param("empId") Long empId,
                          @Param("sortNum") Integer sortNum);

    /**
     * 获取员工病历模板组内最大的排序号
     * @param clinicId
     * @param groupId
     * @param empId
     * @return
     */
    Integer getTemplateMaxSortNum(@Param("clinicId") Long clinicId,@Param("groupId") Long groupId, @Param("empId") Long empId);

    /**
     * 获取公开模板的组内最大的排序号
     * @param clinicId
     * @param groupId
     * @return
     */
    Integer getTemplateShareSortNum(@Param("clinicId") Long clinicId,@Param("groupId") Long groupId);

    /**
     * 将排序号之后的排序号+1
     * @param clinicId
     * @param groupId
     * @param empId
     * @param sortNum
     */
    void incrTemplateSortNum(@Param("clinicId") Long clinicId,
                             @Param("groupId") Long groupId,
                             @Param("empId") Long empId,
                             @Param("sortNum") Integer sortNum);

    /**
     * 查询组内的模板数量
     * @param clinicId
     * @param groupId
     * @return
     */
    Integer getTemplateCount(@Param("clinicId") Long clinicId,
                             @Param("templateType") String templateType,
                             @Param("groupId") Long groupId);

    /**
     * 共享排序号+1
     * @param clinicId
     * @param groupId
     * @param shareSortNum
     */
    void incrTemplateShareSortNum(@Param("clinicId") Long clinicId,
                                  @Param("groupId") Long groupId,
                                  @Param("shareSortNum") Integer shareSortNum);


    /**
     *
     * 获取模板详情
     * @param clinicId
     * @param templateId
     * @return
     */
    TemplateMedicalFieldVo getTemplateMedicalFieldDetail(@Param("clinicId") Long clinicId,
                                                         @Param("templateId") Long templateId);

    /**
     * 获取查验模板详情
     * @param clinicId
     * @param templateId
     * @return
     */
    TemplateMedicalExamVo getTemplateExamDetail(@Param("clinicId") Long clinicId,
                                                @Param("templateId") Long templateId);

    /**
     * 处方模板
     * @param clinicId
     * @param templateId
     * @return
     */
    TemplateMedicalRxVo getTemplateRxDetail(@Param("clinicId") Long clinicId,
                                            @Param("templateId") Long templateId);

    /**
     * 批量添加查验模板明细
     * @param examList
     */
    void addMedicalExamBatch(@Param("examList") List<TemplateMedicalExam> examList);

    /**
     * 批量添加处方集合
     * @param rxList
     */
    void addMedicalRxBatch(@Param("rxList") List<TemplateMedicalRx> rxList);

}
